﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.GUI.Base;
using VentaElectrodomesticos.AbmEmpleado;
using VentaElectrodomesticos.Negocio;
using VentaElectrodomesticos.Datos;
using VentaElectrodomesticos.Contrato;

namespace VentaElectrodomesticos.GUI.AbmEmpleado
{
    public partial class FormAbmEmpleado : BaseListado<EmpleadoNegocio, FormEmpleado, EmpleadoDAO, Empleado>
    {
        private static FormAbmEmpleado instance;

        List<Sucursal> sucursales;
        List<TipoPersona> tipoPersonas;
        List<Provincia> provincias;

        public static FormAbmEmpleado getInstance()
        {
            if (instance == null)
                instance = new FormAbmEmpleado();
            instance.BringToFront();
            return instance;
        }

        public FormAbmEmpleado()
        {
            InitializeComponent();

            SucursalNegocio sucursalNegocio = new SucursalNegocio();

            sucursales = sucursalNegocio.getAll();
            this.comboSucursal.Items.AddRange(sucursales.ToArray());

            TipoPersonaNegocio tipoPersonaNegocio = new TipoPersonaNegocio();

            List<TipoPersona> listaDeTipos = new List<TipoPersona>();

            foreach (TipoPersona tipoPersona in tipoPersonaNegocio.getAll())
            {
                if (tipoPersona.Nombre != "Cliente" && tipoPersona.Nombre != "Admin")
                {
                    listaDeTipos.Add(tipoPersona);
                }
            }
            tipoPersonas = listaDeTipos;
            this.comboTipo.Items.AddRange(tipoPersonas.ToArray());

            ProvinciaDAO provinciaDao = new ProvinciaDAO();
            provincias = provinciaDao.getAll();
            this.comboProvincia.Items.AddRange(provincias.ToArray());

        }

        protected override void initTable(DataGridView table)
        {
            table.Columns["telefono"].Visible = false;
            table.Columns["sucursal_id"].Visible = false;
            table.Columns["provincia_id"].Visible = false;
            table.Columns["tipo_id"].Visible = false;
            table.Columns["direccion"].Visible = false;
            table.Columns["email"].Visible = false;

            table.Columns["_sucursal"].HeaderText = "Sucursal";
            table.Columns["_provincia"].HeaderText = "Provincia";
            table.Columns["_tipo"].HeaderText = "Tipo";
        }


        protected override DataGridView DgList
        {
            get
            {
                return this.listaEmpleados;
            }
        }

        protected override void OnClosed(EventArgs e)
        {
            instance = null;
            base.OnClosed(e);
        }

        protected override void initForm(FormEmpleado formEmpleado)
        {
            formEmpleado.setProvincias(provincias);
            formEmpleado.setSucursales(sucursales);
            formEmpleado.setTipos(tipoPersonas);
        }

        protected override Empleado getFilter()
        {
            Empleado empleadoFilter = new Empleado();
            empleadoFilter.Nombre = textNombre.Text;
            empleadoFilter.Apellido = textApellido.Text;
            empleadoFilter.Dni = textDni.Text;
            if ((Sucursal)comboSucursal.SelectedItem != null) {
                empleadoFilter.Sucursal_Id = ((Sucursal)comboSucursal.SelectedItem).Id;
            }
            if ((Provincia)comboProvincia.SelectedItem != null) {
                empleadoFilter.Provincia_id = ((Provincia)comboProvincia.SelectedItem).Id;
            }
            if ((TipoPersona)comboTipo.SelectedItem != null)
            {
                empleadoFilter.Tipo_Id = ((TipoPersona)comboTipo.SelectedItem).Id;
            }
            
            return empleadoFilter;
        }

        protected override void limpiar()
        {
            this.textApellido.Text = "";
            this.textDni.Text = "";
            this.textNombre.Text = "";
            this.comboProvincia.SelectedIndex = -1;
            this.comboSucursal.SelectedIndex = -1;
            this.comboTipo.SelectedIndex = -1;

            base.limpiar();
        }

        protected override void cumpleValidaciones()
        {
            if (!(RegCondition.Condition(textApellido, RegCondition.RegularExpressions.Alphabet) || textApellido.Text == ""))
                this.Errores.Add("El apellido no es válido");
            if (!(RegCondition.Condition(textDni, RegCondition.RegularExpressions.Numeric) || textDni.Text == ""))
                this.Errores.Add("El DNI debe ser numérico, sin puntos");
            if (!(RegCondition.Condition(textNombre, RegCondition.RegularExpressions.Alphabet) || textNombre.Text == ""))
                this.Errores.Add("El nombre no es válido");
        }

        public class SelectorEmpleados : FormAbmEmpleado {
            protected override List<Empleado> getObjectList()
            {
                return this.Negocio.getAllActives();
            }
            protected override Empleado getFilter()
            {
                Empleado filter =  base.getFilter();
                filter.inactivo = false;
                return filter;
            }
        }

        protected void hideTipoFilter()
        {
            this.comboTipo.Visible = false;
            this.label6.Visible = false;
        }
    }
}
